iT邦幫忙

2022 iThome 鐵人賽

DAY 9
0
自我挑戰組

30天Java由淺入深系列 第 9

Day 9 : 迴圈

  • 分享至 

  • xImage
  •  

介紹

此處要介紹的由結構化程式設計所衍生出來的概念--重複性結構(iteration structure)。

簡單說明一下高階語言的演進,從一開始的非結構化程式設計、結構化程式設計到模組化,最後就是本系列要介紹的物件導向程式設計,不同語言都有發展各自特色,且都有繼承前者設計的一些概念。像我們前章學的條件式判斷就是屬於選擇性結構(selection structure)。

重複性結構又可以稱為迴圈(Loop),主要就是透過特殊條件的判定,持續的執行某區塊程式碼,直到達到某條件才離開迴圈。以下介紹3種迴圈方法,可以依照不同的情況使用。


for 迴圈

  • 使用時機 : 知道區塊程式需要重複執行幾次時。
    for迴圈是3種迴圈中,所需條件最多的,所以當資訊夠多時,使用起來會比較方便。
//for( initial value ; condition ; control elememt)
int number;
for (number = 0 ; number < 5 ; number++){
	System.out.print(number + " ");            //Outputs : 0 1 2 3 4 
}

→ 程式解析 : for迴圈一共需要手動設定3個條件,初始值、條件判斷、控制增減量。在這支程式裡,我們設定從 0 開始(初始值),每次增加一單位(增減量),最後當數值大於等於5時離開,反之則持續執行(條件判斷)。此程式當number = 0時,進入執行程式印出 0 ,當下一次再進入時會先增加一單位,再去判斷是否符合條件,符合才會進入,直到最後number = 4 迴圈結束時,增加一單位變成5,條件判斷上不符合,所以離開迴圈。

以下我們利用for迴圈跑5個隨機變數,並找出其中最大值。

public class Forloop{
	public static void main(String[] args){
		int max=0, i, temp;
		for( i=1 ; i<=5 ; i++){
			temp = (int)(Math.random() * 101 );
			System.out.println(temp);
			if(temp > max)
				max = temp ;
		}
		System.out.println("Maximum = " + max);
	}
}
  • for-each迴圈補充
/*for (variableType variableName : arrayName)*/
String[] name={"Jason","Johnny","Johnson"};
for(String nameNew : name){
	System.out.println(nameNew);
}

簡單來說,就是將陣列中內容以迴圈的方式,創造一個類似指標的概念並一個一個印出。此處不了解沒關係,後續的章節會再將陣列的觀念單獨拉出來解釋。


while 迴圈

  • 使用時機 : 無法得知須執行幾次迴圈時,透過區塊程式設置條件。
    while迴圈一開始僅需設置條件判斷,因為不確定會執行幾次,所以我們在區塊程式內設定增減量,當無法與條件符合時,才跳出迴圈。
/*while(condition){
	.................
	control element;
}*/

int sum = 0;
int add = 1;
while (sum < 100){
	sum += add;
	add += 1;
}
System.out.println(sum);

→程式解析 : 我們想要知道從 1 開始連加(1+2+3+…),哪一個數字是最靠近100的。因為我們不知道要連加幾次的數字是最靠近100,所以使用while loop僅設定總和小於100時才會執行迴圈,區塊程式則是算每次相加後的結果,每次進入前都會判斷條件一次。


do-while 迴圈

  • 使用時機 : 當遇到需要先執行一次才判斷且無法得知執行幾次時。
    do-while loop與前面兩者不同的是,它屬於「後測試」迴圈。亦即不論條件是否符合,都會先執行一次區塊程式,因為其判斷條件的while在其後方。
/*do{
	code to be executed;
}while(condition);*/
int num = 10;
do{
	System.out.print(num + " ");          //Outputs : 10 9 8 7 6 
	num--;
}while(num > 5)
System.out.println();
System.out.println(num);                //Outputs: 5

→程式解析 : 我們設定初值為10,透過do-while印出大於 5 的所有整數。此程式重點在第7,8,10行,因為每次印出一個數字後,都會將其減去1後才做條件判斷。當我們印出6時,減去1後因為不符合大於5的條件,所以跳出。此時num內儲存的是減去 1 後的 5,第10行才會印出5。
!特別注意! do-while最後while結尾後要加上;


以下提供一個3種迴圈的比較圖 :
https://ithelp.ithome.com.tw/upload/images/20220924/20151216qccP1OPsY5.png
此圖參考C語言學習手冊-第四版


0923錯誤更正 :

此章節主題「 Day 8 條件式判斷」最後簡易歌單功能表程式內容有誤,以下更正 :

import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        
        Scanner input = new Scanner(System.in);
		int function;
        
        while(true){
             System.out.println("請輸入功能編號: ");
	         function = input.nextInt();
	         switch(function){
	             case 1 :
	                 System.out.println("歌手查詢");
	                 break;
	             case 2 :
	                 System.out.println("歌名查詢");
	                 break;
	             case 3 :
	                 System.out.println("更改資訊");
	                 break;
	             case 4 :
	                 System.out.println("隨機撥放");
	                 break;
	             default :
	                 System.out.println("輸入錯誤");
	                 break;
	         }
		}
    }
}

以上內容若有錯誤,煩請不吝嗇告知,謝謝您!!!/images/emoticon/emoticon62.gif


上一篇
Day 8 : 條件式判斷
下一篇
Day 10 : 陣列
系列文
30天Java由淺入深30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言